1. Field of the Invention
This invention relates to compiler. In particular, the invention relates to debugger support.
2. Background of the Invention
Traditional compilers embed the symbol table information into the executables during compilation. After parsing symbol table information and creating efficient data structures to store this information, the debugging and other programming tools can use the symbol table information during their executions.
The amount of memory storage to store the symbol table information may be large. Some compilers may have a limit on the amount of valid symbol table information that can be used. Examples of such compilers include JAVA compilers. A static JAVA compiler converts JAVA source code into a verifiably secure and compact architecture-neutral intermediate format, call JAVA byte codes. A JAVA Virtual Machine interprets the byte code instructions at run time. To improve run-time performance, a Just-In-Time (JIT) JAVA compiler produces native code from JAVA byte code instructions during program execution. However, the symbol table information generated by the JAVA language is not sufficient to be used by the JIT compiler to provide debugging support. This is because the symbol table information in class files is generated for architecture independent byte codes while the JIT compiler generates machine specific instructions.
Existing techniques to provide debugging support have a number of drawbacks. One technique is to construct additional data structures and store all the information that might possibly be used in the future. This technique increases the memory requirement significantly. Another technique is to simulate the translation of byte codes to native instructions and to produce the information when needed. This technique unduly degrades execution performance.
Therefore, there is a need for a technique to provide efficient debugging support.